标签
spring
数据库
字数
791 字
阅读时间
4 分钟
一、概述
MongoDB是一个跨平台的,面向文档的数据库,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似 JSON 的一种格式,因此可以存储比较复杂的数据类型。
MongoDB主要由文档(document)、集合(collection)、数据库(database)三部分组成
- 文档(document)就相当于关系数据库中的一行记录
- 多个文档组成一个集合(collection),相当于关系数据库的表
- 多个集合组织在一起,就是数据库(database),一个 MongoDB 实例支持多个数据库
SpringData MongoDB是SpringData技术封装了mongodb-driver技术之后的产物,它可以用更加简单的方式操作MongoDB。
二、使用示例
2.1 入门demo
依赖
xml
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.1.8.RELEASE</version>
</dependency>配置
xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
<!--包扫描-->
<mongo:repositories base-package="com.itheima"/>
<!-- spring连接mongodb数据库的配置 -->
<!--
host="192.168.106.128" 指定mongodb服务所在主机地址
port="27017" 指定mongodb服务所在主机端口号
dbname="heima" 数据名称
-->
<mongo:mongo-client host="192.168.106.128" port="27017" id="mongo">
<mongo:client-options write-concern="SAFE"/>
</mongo:mongo-client>
<mongo:db-factory id="mongoDbFactory" dbname="heima" mongo-ref="mongo"/>
<!--mongoTemplate-->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
</bean>
</beans>实体类
java
package com.itheima.domain;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
//使用@Document建立的是实体类和collection的关系
@Document("article")
public class Article {
@Id//用来标识主键
private Integer id;
//使用@Field建立实体类中属性跟collection中字段的映射关系,如果省略,代表两个名称一致
//@Field
private String name;
private String content;
private Integer hits;
// 省略get/set toString 方法
}dao层接口
java
package com.itheima.dao;
import com.itheima.domain.Article;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
public interface ArticleDao extends MongoRepository<Article, Integer> {
//根据标题查询
List<Article> findByNameLike(String name);
//根据点击量查询
List<Article> findByHitsGreaterThan(Integer hits);
}使用方式
java
package com.itheima.test;
import com.itheima.dao.ArticleDao;
import com.itheima.domain.Article;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
import java.util.Optional;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class ArticleDaoTest {
@Autowired
private ArticleDao articleDao;
//保存
@Test
public void testSave() {
Article article = new Article();
article.setId(1);
article.setName("黑马程序员");
article.setContent("黑马程序员很低调");
article.setHits(100);
articleDao.save(article);
}
//修改
@Test
public void testUpdate() {
Article article = new Article();
article.setId(1);
article.setName("黑马程序员2");
article.setContent("黑马程序员很低调2");
article.setHits(200);
articleDao.save(article);
}
//修改
@Test
public void testDelete() {
articleDao.deleteById(1);
}
//做数据
@Test
public void makeData() {
for (int i = 1; i <= 10; i++) {
Article article = new Article();
article.setId(i);
article.setName("黑马程序员" + i);
article.setContent("黑马程序员很低调" + i);
article.setHits(100 + i);
articleDao.save(article);
}
}
//查询所有
@Test
public void testFindAll() {
List<Article> articles = articleDao.findAll();
for (Article article : articles) {
System.out.println(article);
}
}
//主键查询
@Test
public void testFindById() {
Optional<Article> opt = articleDao.findById(1);
System.out.println(opt.get());
}
//分页和排序
@Test
public void testFindAllWithPageAndSort() {
//设置排序条件
Sort sort = Sort.by(Sort.Order.desc("hits"));
//设置分页条件
Pageable pageable = PageRequest.of(1, 3, sort);
Page<Article> page = articleDao.findAll(pageable);
for (Article article : page.getContent()) {
System.out.println(article);
}
}
//根据标题查询
@Test
public void testFindByName() {
List<Article> articles = articleDao.findByNameLike("黑马程序员1");
for (Article article : articles) {
System.out.println(article);
}
}
//根据标题查询
@Test
public void testFindByHitsGreaterThan() {
List<Article> articles = articleDao.findByHitsGreaterThan(105);
for (Article article : articles) {
System.out.println(article);
}
}
}